from django.db import models
from django.http import HttpResponse
'''
Django 模型字段选项说明
null:如果为True，表示允许为空，默认值是False
blank:如果为True，则该字段允许为空白，默认值是False
db_column:字段的名称，如果未指定，则使用属性的名称
db_index:若值为True，则在表中会为此字段创建索引，默认值是False
default:默认值
primary_key:若为True，则该字段会成为模型的主键字段，默认值是False，一般作为AutoField的选项使用
unique:如果为True，这个字段在表中必须有唯一值，默认值是False
补充说明：
null 是数据库范畴的概念
blank 是表单验证范畴的概念
'''
#默认表的名称：子应用_类名   都是小写
# Create your models here.
#属性名不要使用连续的下划线(__)
class BookInfo(models.Model):
    name=models.CharField(max_length=10,unique=True)
    pub_date=models.DateField(null=True)
    readcount=models.IntegerField(default=0)
    commentcount=models.IntegerField(default=0)
    is_delete=models.BooleanField(default=False)

    # 一对多的关系模型中
    # 系统会为我们自动添加一个 关联模型类名小写_set
    #
    # peopleinfo_set=[PeopleInfo,PeopleInfo,...]

    class Meta:
        db_table='bookinfo'#修改表的名称
    def __str__ (self):
        return self.name

class PeopleInfo(models.Model):
    #定义一个字典
    GENDER_CHOICE=(
        (1,'male'),
        (2,'female')
    )
    name=models.CharField(max_length=10,unique=True)  #人物名
    gender=models.SmallIntegerField(choices=GENDER_CHOICE,default=1)#性别
    description=models.CharField(max_length=10,null=True)#描述信息
    is_delete=models.BooleanField(default=False)#是否删除

    book=models.ForeignKey(BookInfo,on_delete=models.CASCADE,default=1)
    # Django会自动在数据库表中创建一个名为book_id的字段（用于存储关联的BookInfo记录的id）。
    # 因此，在创建PeopleInfo记录时，既可以用book = 书籍对象，也可以用book_id = 书籍id
    '''
    1.models.ForeignKey：Django模型中的外键字段类型，用于表示 “多对一” 关系
     （即多个PeopleInfo记录可以关联到同一个BookInfo记录）。
    2.on_delete=models.CASCADE：定义当被关联的主表记录（BookInfo 中的某条书籍记录）被删除时，
    从表（PeopleInfo）中关联的记录如何处理：CASCADE 表示 “级联删除”。
    3.default=1：为外键字段设置默认值，表示当创建 PeopleInfo 记录时，
    如果不指定 book 关联的书籍，会默认关联到 BookInfo 表中 id=1 的书籍记录。
    '''


    class Meta:
        db_table='peopleinfo'
    def __str__ (self):
        return self.name